package generatedjava;

import java.util.*;
public class Noeud{

	   String racine;
	   
	   Noeud filsGauche;
	   Noeud filsDroit;
	   boolean Feuille;
	   int hauteur;
	   public static Noeud Racine;
	   public ArrayList<String> Liste=new ArrayList<String>();
	   
	   
	   static int numeroCourant=1;

	   
	   Noeud( String valeur  , Noeud filsGauche , Noeud filsDroit ){
		   
		   this.racine = valeur ;
		   this.Liste.add(valeur);
		   this .filsDroit = filsDroit; 
		   this.filsGauche = filsGauche ; 
		   this.hauteur=0;
		   
		   if (  this .filsDroit ==null &&  this .filsGauche == null) {
			   this.Feuille = true ; 
		   }else {
			   this.Feuille = false ;
			   
		   }
		   
	   }
	   
	   
 public void   setFils (Noeud filsG, Noeud filsD )  {
		   
		   this.filsGauche = filsG ;
		   this.filsDroit = filsD ;
		   this.Feuille = false;
		   this.hauteur++;
	   }
	  
	 public void   addFilsGauche (Noeud fils )  {
		   
		   this.filsGauche = fils ;
	   }
	 
	 
	 public void   addFilsDroit (Noeud fils )  {
		   
		   this.filsDroit = fils ;
	   }

	 public String calculTab(int i ){
		 String tab="";
		 for (int j = 0; j < i; j++) {
			tab+="\t";
		}
		 return tab;
	 }
	public  static void affichageTP1(Noeud n) {
		
			
		if(n != null){
			if (n.filsDroit != null || n.filsGauche != null ){
					System.out.print("( "+n.racine);
					affichageTP1(n.filsGauche) ;
					affichageTP1(n.filsDroit) ;
					System.out.print(" )");
			}
			else
				System.out.print(" "+n.racine);
		}
	}
		
		public  static void affichageTP2(Noeud n,String tab) {
			

			if(n != null){
				if (n.filsDroit != null || n.filsGauche != null ){
						System.out.print(n.racine+"\t");
						tab+="\t";
						affichageTP2(n.filsGauche,tab) ;
						System.out.print("\n"+tab);
						affichageTP2(n.filsDroit,tab) ;
				}
				else{
					
					System.out.print(n.racine);
				}
			}
		}
			
			public  static void affichageFun(Noeud n,String tab,String saut) {
				

				if(n != null){
					if (n.filsDroit != null || n.filsGauche != null ){
							
							saut +="\n";
							
							affichageFun(n.filsGauche,tab,saut) ;
							
							System.out.print(saut+tab+n.racine);
							tab+="\t";
							affichageFun(n.filsDroit,tab,saut) ;
					}
					else{
						
						System.out.print(saut+tab+n.racine+" ");
					}
				}
			
	}
			public static int getHauteur(Noeud n){
				if(n.filsGauche == null)
					return 0;
				else{
					int tmp=0;
					int max = 0;
						 tmp = 1 +getHauteur(n.filsGauche);
						 if(max<tmp)
							 max=tmp;
						 
						 tmp =1 +getHauteur(n.filsDroit);
						 if(max<tmp)
							 max=tmp;
						 return max;
			}
				
			}
			
	
	 public static void main(String[] args) {
		 
		 Noeud n = new Noeud(";", new Noeud("let", 
				 									new Noeud("prixTtc",null,null),
				 									new Noeud("/", 
				 											new Noeud("*",
				 																new Noeud("prixHt", null ,null),
				 																new Noeud("119", null ,null)),
				 											new Noeud("100", null ,null))), 
				 				  new Noeud("+", 
				 						 new Noeud("prixHt", null ,null),
											new Noeud("100", null ,null)));
		 

		 System.out.println( getHauteur(n));
		 affichageTP1(n);
		 System.out.println();
		 //affichageTP2(n,"");
		
	}
	   
}
	   
	   
	   